﻿--[[
    author:liuzhihong
    time:2021-11-24
    desc: 公共基类
]]

local comm_tab = require("modules.business_common.utils.business_table")
local _M = {}

--!@成员函数形式的new
function _M:new(o)
	o = o or {}

    -- 继承父类的方法
	if o.parent==nil then
	    for key,value in next,self do
		   if type(value)=='table' and key~='parent' then
                if o[key]==nil or o[key]==value then
					o[key]= comm_tab.copy(value)
				end
		   end
	    end

		o.parent = self

        -- 继承父类方法
		setmetatable(o,{__index = self})
	end

	-- 调父类new
    if self.parent~=nil then
	   o = self.parent:new(o)
	end

	-- 调构造函数
	if self.construct then
	  self.construct(o)
	end

	return o
end

-- 成员函数形式的delete
function _M:delete()
	-- 调父类delete
	local parent = self
	for _ = 1, 64, 1 do
		-- 调释构函数 
		if parent.destroy then
			parent.destroy(self)
		end

        parent = parent.parent
		if parent==nil then
			break
		end
	end
end

return  _M